箭头函数的写法:

箭头函数相当于匿名函数,它的写法是:

x => x*x

它相当于

fucntion (x){
    return x*x;
}

可以看到,只有一条语句的箭头函数省略了括号与return。如果含有多条表达式,那么就不能省略{}return

x => {
    if(x>0){
        return x*x;
    }else{
        return -x*x;
    }
    
}

如果函数多个参数,那么小括号()也不能省略:

// 两个参数:
(x, y) => x * x + y * y

// 无参数:
() => 3.14

// 可变参数:
(x, y, ...rest) => {
    var i, sum = x + y;
    for (i=0; i<rest.length; i++) {
        sum += rest[i];
    }
    return sum;
}

如果要返回一个表达式的话,这样写会报错:

x => {foo.x}

因为和函数体的{...}有冲突,所以要改为:

x => ({foo.x})

this指向的修复

不使用箭头函数的时候,在对象的方法中使用this需要使用hack写法:

var obj = {
    birth: 1990,
    getAge: function () {
        var _this = this;
        var fn = function () {
            return new Date().getFullYear() - _this.birth; // this指向window或undefined
        };
        return fn();
    }
};

现在,箭头函数完全修复了this的指向,this总是指向词法作用域,也就是外层调用者obj

var obj = {
    birth: 1990,
    getAge: function () {
        var b = this.birth; // 1990
        var fn = () => new Date().getFullYear() - this.birth; // this指向obj对象
        return fn();
    }
};
obj.getAge(); // 25

stray_bird_
10 声望0 粉丝